home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / ms_dos / lm / all next >
Text File  |  1993-11-30  |  11KB  |  423 lines

  1. # DIVIDE_START=update.doc
  2. -------------------------- lm001a --------------------------
  3. 1993.8.1
  4.  Version 0.01a 作成開始。
  5. ・仕様
  6.  (1) 起動方法
  7.     lm ディレクトリ名
  8.     lm .               カレント・ディレクトリの場合
  9.  
  10.  (2) 注意
  11.     LHA.EXE をパスの通った所に置いておくこと
  12.  
  13.  (3) 処理内容
  14.    1 ディレクトリを探索してCATLOGで整理済のファイルを探す。
  15.    2 見つかったら、そのファイルの拡張子を削除してファイル名だけを取り出す。
  16.    3 そのファイル名を書庫名として LHA を起動する。
  17.    4 CATLOGで整理済のファイルが見つからなくなるまで繰り返す。
  18.  
  19. # DIVIDE_END
  20.  
  21. /* DIVIDE_START=main.c */
  22. /*
  23.     lm                                                    main.c
  24.  
  25.             作 : 山先(NIFTY-ID:GHH01217)
  26. */
  27. #define        MAIN    1
  28. #include    "lm.h"
  29.  
  30. static    void    useage()
  31. {
  32.     printf(
  33.         "CATLOGで整理したファイルを圧縮するプログラム\n\t%s\tVersion=%s"
  34.         "  by .. GHH01217 山先\n"
  35.         , str
  36.         , VERSION
  37.     );
  38.     printf(
  39.         "\n 使い方:lm ディレクトリ名"
  40.         "\n     lm .   ……………… カレント・ディレクトリの場合"
  41.     );
  42. }
  43.  
  44. /******************************************
  45. #if    VERIFY == YES
  46.     if ( verify == TRUE ) {
  47.         printf( "同じ発言日時、発言番号のものは削除する" );
  48.     };
  49. #endif
  50. *********************************************/
  51.  
  52. const    char    *last_comma( const char *str )
  53. {
  54.     const    char    *result;
  55.  
  56.     result = str;
  57.     while ( *str ) {    if ( *str == '.' ) result = str;
  58.                         str++;
  59.     };    return( result );
  60. }
  61.  
  62. const    char    *last_yen( const char *str )
  63. {
  64.     const    char    *result;
  65.  
  66.     result = str;
  67.     while ( *str ) {    if ( *str == '\\' ) result = str;
  68.                         str++;
  69.     };    return( result );
  70. }
  71.  
  72. void    append_yen( char *str )
  73. {
  74.     char    c;
  75.  
  76.     while ( *str )    str++;
  77.     c = *( str -1 );
  78.     if ( c != '\\' && c != ':' ) {
  79.         *str++ = '\\';
  80.         *str = '\0';
  81.     };
  82. }
  83.  
  84. static    void    (*lm_findfirst_sub)( const char *file , const char *ff_name );
  85.  
  86. static    void    lm_findfirst_loop( const char *path )
  87. {
  88.             int        done;
  89.     struct    ffblk    ffblk;
  90.             char    f_name[ 256 ];
  91.  
  92.     strcpy( f_name , path );    strcat( f_name , "*.*" );    /* 全ファイルを検索 */
  93.     done = findfirst( f_name , &ffblk , FA_DIREC );    /* Directory を指定 */
  94.     while ( ! done ) {
  95.         strcpy( f_name , path );    strcat( f_name , ffblk.ff_name );
  96.         if ( ffblk.ff_attrib == FA_DIREC ) {
  97.             if (    strcmp( ffblk.ff_name , "." ) != 0
  98.             &&        strcmp( ffblk.ff_name , ".." ) != 0
  99.             ) {    /* Sub dir 再帰呼出し */
  100.                 strcat( f_name , "\\" );    lm_findfirst_loop( f_name );
  101.             };
  102.         } else {
  103.             /* ファイル名 */
  104.             (*lm_findfirst_sub)( f_name , ffblk.ff_name );
  105.         };
  106.         done = findnext( &ffblk );
  107.     };
  108. }
  109.  
  110. void    lm_findfirst(
  111.     const char *path,
  112.     void (*sub)( const char *file , const char *ff_name )
  113. ) {
  114.     lm_findfirst_sub = sub;
  115.     lm_findfirst_loop( path );
  116. }
  117.  
  118. int        matchstr( char *form , char *trg )
  119. {
  120.     while ( *form ) {
  121.         switch( *form ) {
  122.             case '%':    if ( ! isdigit( *trg ) )    return( FALSE );
  123.                         break;
  124.             case '$':    if ( ! isalpha( *trg ) )    return( FALSE );
  125.             case '?':    break;
  126.             default:    if ( *form != *trg )        return( FALSE );
  127.         };
  128.         form++;        trg++;
  129.     };
  130.     return( TRUE );
  131. }
  132.  
  133. int        isIDname( char *str )
  134. {
  135.     if ( matchstr( "$$$%%%%%" , str ) == TRUE )        return( YES );
  136.     return( NO );
  137. }
  138.  
  139. static    int        isCATLOGFile( const char *f_name )
  140. {
  141.     int        num;
  142.     char    *p1 , *p2;
  143.     FILE    *fpi;
  144.  
  145.     if ( ( fpi=fopen( f_name , "r" ) ) == NULL ) {    /* 起こり得ないエラー */
  146.         printf( str, "can't open→<%s> (read)\n", f_name );
  147.         exit( 1 );
  148.     };
  149.     fgets( str , LINE , fpi );
  150.  
  151.     num = 0;
  152.     if (         strncmp( str , "FORUM:" , 6 ) == 0 ) {
  153.         p1 = str + 6;        p2 = str;
  154.         while ( isalnum( *p1 ) ) *p2++ = *p1++;        *p2 = '\0';
  155.         while ( *p1 == ' ' ) p1++;
  156.         if ( strncmp( p1 , "MES:" , 4 ) == 0 ) {
  157.             p1 += 4;        /* skip 'MES:' */
  158.             num = atoi( p1 );
  159.         };
  160.     } else if ( strncmp( str , "MAIL:" , 5 ) == 0 ) {
  161.         p1 = str + 5;        p2 = str;
  162.         while ( isalnum( *p1 ) ) *p2++ = *p1++;        *p2 = '\0';
  163.         if ( isIDname( str ) == YES ) {
  164.             num = MAIL;
  165.         };
  166.     } else if (    strncmp( str , "HP:" , 3 ) == 0 ) {
  167.         p1 = str + 3;        p2 = str;
  168.         while ( isalnum( *p1 ) ) *p2++ = *p1++;        *p2 = '\0';
  169.         if ( isIDname( str ) == YES ) {
  170.             num = HP;
  171.         };
  172.     } else if (    strncmp( str , "PATIO:" , 6 ) == 0 ) {
  173.         p1 = str + 6;        p2 = str;
  174.         while ( isalnum( *p1 ) ) *p2++ = *p1++;        *p2 = '\0';
  175.         if ( isIDname( str ) == YES ) {
  176.             num = PATIO;
  177.         };
  178.     } else if (    strncmp( str , "BILL:BILL" , 9 ) == 0 ) {
  179.         num = BILL;
  180.     } else if (    strncmp( str , "COLLECT_ID:" , 11 ) == 0 ) {
  181.         p1 = str + 11;        p2 = str;
  182.         while ( isalnum( *p1 ) ) *p2++ = *p1++;        *p2 = '\0';
  183.         if ( isIDname( str ) == YES ) {
  184.             num = COLLECT_ID;
  185.         };
  186.     } else if (    strncmp( str , "ALL-MAIL" , 8 ) == 0 ) {
  187.         num= ALL_MAIL;
  188.     } else if (    strncmp( str , "CLIP" , 4 ) == 0 ) {
  189.         num = CLIP;
  190.     };
  191.     fclose( fpi );
  192.     return( num );
  193. }
  194.  
  195. static    void    main_loop( const char *f_name , const char *ff_name )
  196. {
  197.     char    *p1, *p2;
  198.  
  199.     if ( isCATLOGFile( f_name ) == 0 )            return;
  200.  
  201.     strcpy( file_name, f_name );
  202.  
  203.     p1 = (char *)last_yen( file_name );
  204.     p2 = (char *)last_comma( p1 );        if ( p1 != p2 )        *p2 = '\0';
  205.  
  206.     sprintf( str, "lha u %s %s", file_name, f_name );
  207.     printf( "%s\n", str );
  208.  
  209.     if ( spawnlp( P_WAIT, "lha", "lha", "u", file_name, f_name, NULL ) != 0 ) {
  210.         printf( "処理の途中ですが、終了します(lm)\n" );
  211.         exit( 1 );
  212.     };
  213. }
  214.  
  215. void    main( int argc , char *argv[] )
  216. {
  217.     char    path[ MAX_FILENAME_LEN ];
  218.  
  219.     strcpy( str, argv[0] );
  220.  
  221.     if ( --argc <= 0 ) {        useage();    exit( 1 );    };
  222.     ++argv;
  223.     strcpy( path, *argv );
  224.     append_yen( path );
  225.  
  226.     lm_findfirst( path, main_loop );
  227.  
  228.     exit( 0 );                /* 終了 */
  229. }
  230. /* DIVIDE_END */
  231.  
  232. /* DIVIDE_START=lm.h */
  233. /*
  234.             作 : 山先(NIFTY-ID:GHH01217)
  235. */
  236.  
  237. #include    <mylib.h>
  238. #include    <stdlib.h>
  239. #include    <ctype.h>
  240. #include    <jctype.h>
  241. #include    <string.h>
  242. #include    <process.h>
  243. #include    <dos.h>
  244. #include    <dir.h>
  245. #include    "extern.h"
  246.  
  247. #define        LINE                (1024*2)
  248. #define        MAX_FILENAME_LEN    64
  249.  
  250. /* CATLOG の会議室番号の定義 */
  251. #define    HP            -1            /* Home Party である */
  252. #define    MAIL        -2            /* 電子メールである */
  253. #define    BILL        -3            /* 利用料金情報である */
  254. #define    COLLECT_ID    -4            /* ID収集ファイルである */
  255. #define    LIB            -5            /* LIB の一覧である */
  256. #define    COLLECT_LIB    -6            /* IDによる LIB の収集ファイルである */
  257. #define    ALL_MAIL    -7            /* 1つにまとめた MAIL ファイルである */
  258. #define    PATIO        -8            /* PATIO である */
  259. #define    CLIP        -9            /* クリッピングサービスである */
  260. #define    MES            20            /* フォーラムの会議室である */
  261.  
  262. #ifdef    MAIN
  263. #if    VERIFY == YES
  264.             int        verify = FALSE;
  265. #endif
  266.             char    file_name[ MAX_FILENAME_LEN ];
  267.             char    str[ LINE ];
  268.  
  269. #else
  270. #if    VERIFY == YES
  271.     extern    int        verify ;
  272. #endif
  273.     extern    char    file_name[ MAX_FILENAME_LEN ];
  274.     extern    char    str[ LINE ];
  275. #endif
  276. /* DIVIDE_END */
  277.  
  278. # DIVIDE_START=makefile
  279.  
  280. VERSION00    =    0
  281. VERSION01    =    01
  282. VERSION02    =    a            # 元のバージョン
  283. VERSION03    =    b            # 現在のバージョン
  284. VERSION04    =    $(VERSION00)$(VERSION01)$(VERSION02)    # 元の書庫ファイル
  285.  
  286. VERSION1    =    $(VERSION00)
  287. VERSION2    =    $(VERSION01)$(VERSION03)
  288. VERSION3    =    $(VERSION00)$(VERSION01)$(VERSION02)$(VERSION03)
  289. VERSION        =    $(VERSION1)$(VERSION2)
  290. MemoryModel    =    s
  291. tc            =    tcc
  292. lib            =    tlib
  293. link        =    tlink
  294. cflags        =    -m$(MemoryModel) -A -d -N -O -DVERSION="$(VERSION1).$(VERSION2)" -DVERIFY=YES
  295.  
  296. .c.obj    :
  297.     $(tc)    -c $(cflags) -Ie:\tc\include $*
  298.  
  299. .c.com    :
  300.     $(tc)    $(cflags) -Ie:\tc\include $*
  301.     $(link)    /c \tc\lib\c0t.obj $*.obj , $* , nul , @listlibs
  302.  
  303. com_prg        =    lm.exe
  304.  
  305. hdr1        =    lm.h \tc\include\mylib.h
  306. obj1        =    main.obj
  307.  
  308. $(com_prg)    :    $(obj1) makefile $(hdr1) all listlibs
  309.     tlink    /c \tc\lib\c0$(MemoryModel).obj $(obj1) , $* , nul , @listlibs
  310.         copy    $(com_prg) d:\exe
  311.         lha        u    $*$(VERSION) *.exe all
  312.         lha        u    $*$(VERSION)0 *.exe *.ggg readme.doc
  313.     # 差分ファイルを作り、削除する
  314.     #    cd        old
  315.     #    del        *.exe
  316.     #    lha        e    ..\$*$(VERSION04) *.exe        # 元のファイルの解凍
  317.     #    cd        ..
  318.     #    bdiff    old\$*.exe $*.exe $*$(VERSION3).bdf
  319.     #    lha        u    $*$(VERSION3) $*$(VERSION3).bdf
  320.     #    del        $:$(VERSION3).bdf
  321.     #    del        $*$(VERSION3).i*
  322.     #    ish        $*$(VERSION3).lzh /ss /mv 100
  323.  
  324. $(obj1)        : $(hdr1) makefile
  325. # DIVIDE_END
  326.  
  327. # -DIVIDE_START=listlibs
  328. e:\tc\lib\emu e:\tc\lib\maths e:\tc\lib\cs
  329. # DIVIDE_END
  330.  
  331. REM DIVIDE_START=m.bat
  332. echo off
  333. :loop
  334.     if        "%1"==""    goto    main
  335.     vz        %1
  336. :loop2
  337.     make
  338.     if        errorlevel    1        goto    error
  339.     goto    end
  340. :main
  341.     vz        all
  342.     div        all
  343.     goto    loop2
  344. :error
  345.     pause
  346.     goto loop
  347. :end
  348. REM DIVIDE_END
  349.  
  350. REM DIVIDE_START=u.bat
  351.     div -u:update.doc all
  352.     if errorlevel 1 goto end
  353.     div -a:*.c all
  354.     div -a:*.h all
  355.     div -a:makefile all
  356.     div -a:listlibs all
  357.     div -a:*.bat all
  358.     div -a:readme.doc all
  359.     div -a:*.ggg all
  360. :end
  361. REM DIVIDE_END
  362.  
  363. /* DIVIDE_START=readme.doc */
  364.             ------------
  365.                lmの使い方
  366.             ------------
  367.  
  368. 1.lmがすること。
  369.     本プログラムは、指定のディレクトリ、及び、その下のディレクトリを
  370.    自動検索してCATLOGで整理してできたファイルを検索し、見つけた
  371.    ファイルをLHAを起動して、同名の書庫ファイルに圧縮保存するもので
  372.    す。
  373.  
  374. 2.CTの実行の仕方
  375.    コマンドライン上で、次のように実行して下さい。
  376.      lm ディレクトリ名
  377.      lm .               カレント・ディレクトリの場合
  378.  
  379.  ★ 注意
  380.     LHA.EXE が必要です。
  381.     LHA.EXE をパスの通った所に置いて下さい。そうでないと異常終了します。
  382.  
  383.  ☆ 処理内容
  384.   1 ディレクトリを探索してCATLOGで整理済のファイルを探す。
  385.      CATLOGが作ったファイルかどうかは、そのファイルの1行目を読み込
  386.     んで判断しています。
  387.   2 見つかったら、そのファイルの拡張子を削除してファイル名だけを取り出す。
  388.   3 そのファイル名を書庫名として LHA を起動する。
  389.   4 CATLOGで整理済のファイルが見つからなくなるまで 1 ~ 3 を繰り返す。
  390.  
  391. 3.著作権
  392.   本プログラムは NIFTY ID:GHH01217 山先(やません)に著作権があるものと
  393.  します。しかし、その使用、配付は自由に行っていただいてかまいません。
  394.  
  395. 4.何かありましたら。
  396.  私あてメールを下さい。
  397.  
  398.                        GHH01217 山先
  399. /* DIVIDE_END */
  400.  
  401. /* DIVIDE_START=lm.ggg */
  402. ======================================================================
  403. 【ソフト  名】  lm.exe CATLOG整理済ファイル圧縮プログラム  Version 0.01a
  404. 【登  録  名】  lm001a.lzh (LHAで解凍して下さい)
  405. 【検索  キー】  1:LM 2:MOPTERM 3:FAPX 4:CATLOG
  406. 【著作権  者】  山先  GHH01217
  407. 【開発  環境】  Turbo-C Ver2.0  →  lm.exe
  408. 【対応  機種】  MS-DOS 汎用
  409. 【動作  確認】  FM-TOWNS20F + 8M-RAM  コンソール上
  410. 【公  開  日】  93/08/01
  411. 【ソフトウェア種別】 通信関連。フリー・ソフトウェア。
  412. 【使用 条件】  バグを発見した場合は、メール等で報告すること。
  413. ======================================================================
  414. 【ソフト紹介】
  415.   CATLOGが作るファイルを自動検索してLHAを起動するものです。
  416.   別途、LHAを入手して下さい。また、LHAはパスの通った所に置いて
  417.  下さい。
  418.   詳しくはREAD.DOCをお読み下さい。
  419.  
  420.  ダウンロードファイル名を  lm001a.lzh   として下さい。
  421.                                               GHH01217  山先
  422. /* DIVIDE_END */
  423.